From: Carlos Garnacho Date: Tue, 8 Oct 2019 10:22:34 +0000 (+0200) Subject: ibusCandidatePopup: Use an internal actor to track IM focus position X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~811^2^2~3 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=a722b4c51d2cc20cbec614a93c4a9b13214c2e8d;p=gnome-shell.git ibusCandidatePopup: Use an internal actor to track IM focus position We share this actor with other shell menus, which arguably track a different "cursor" as we care of the caret/anchor text positions, and menus care about pointer click coordinates. Use a standalone actor for this, so popups/IM are entirely decoupled. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1571 --- diff --git a/js/ui/ibusCandidatePopup.js b/js/ui/ibusCandidatePopup.js index b9d209261..9f23f578c 100644 --- a/js/ui/ibusCandidatePopup.js +++ b/js/ui/ibusCandidatePopup.js @@ -126,6 +126,9 @@ Signals.addSignalMethods(CandidateArea.prototype); var CandidatePopup = class CandidatePopup { constructor() { + this._dummyCursor = new St.Widget({ opacity: 0 }); + Main.layoutManager.uiGroup.add_actor(this._dummyCursor); + this._boxPointer = new BoxPointer.BoxPointer(St.Side.TOP); this._boxPointer.visible = false; this._boxPointer.style_class = 'candidate-popup-boxpointer'; @@ -272,9 +275,11 @@ var CandidatePopup = class CandidatePopup { } _setDummyCursorGeometry(x, y, w, h) { - Main.layoutManager.setDummyCursorGeometry(x, y, w, h); + this._dummyCursor.set_position(Math.round(x), Math.round(y)); + this._dummyCursor.set_size(Math.round(w), Math.round(h)); + if (this._boxPointer.visible) - this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0); + this._boxPointer.setPosition(this._dummyCursor, 0); } _updateVisibility() { @@ -284,7 +289,7 @@ var CandidatePopup = class CandidatePopup { this._candidateArea.actor.visible)); if (isVisible) { - this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0); + this._boxPointer.setPosition(this._dummyCursor, 0); this._boxPointer.open(BoxPointer.PopupAnimation.NONE); this._boxPointer.raise_top(); } else {